package com.oneboot.bbsdemo.config;

import com.oneboot.bbsdemo.common.Constants;
import com.oneboot.bbsdemo.interceptor.LoginInterceptor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
public class WebMvcConfiger implements WebMvcConfigurer {
    @Autowired
    private LoginInterceptor loginInterceptor;

    /**
     * 登陆拦截
     *
     * @param registry
     */
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(loginInterceptor)

                //不用拦截的路径
                .excludePathPatterns("/register")
                .excludePathPatterns("/login")
                //需要拦截的路径
                .addPathPatterns("/logout")
                .addPathPatterns("/addPostPage")
                .addPathPatterns("/addPost")
                .addPathPatterns("/addCollect/**")
                .addPathPatterns("/editPostPage")
                .addPathPatterns("/editPost")
                .addPathPatterns("/detail/**")
                .addPathPatterns("/uploadFile")
                .addPathPatterns("/uploadFiles")
                .addPathPatterns("/updateUserInfo")
                .addPathPatterns("/updateHeadImg")
                .addPathPatterns("/updatePassword")
                .addPathPatterns("/userCenter")
                .addPathPatterns("/userCenter/**")
                .addPathPatterns("/myCenter")
                .addPathPatterns("/userSet");
    }

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/upload/**")
                .addResourceLocations("file:" + Constants.UPLOAD_PATH);
        //在路径前加上 "file:" 是为了指定资源的协议类型。"file:" 表示这是一个文件系统路径，而不是其他类型的资源路径（如 HTTP URL）。
    }

}

/**
 * addPathPatterns("/userCenter") 只会匹配 /userCenter 这个路径，不会匹配 /userCenter/xxx 这样的子路径
 * <p>
 * 方法实现：
 * addInterceptors(InterceptorRegistry registry)：
 * 作用：添加拦截器。
 * 逻辑：
 * 使用 registry.addInterceptor(myBBSLoginInterceptor) 添加登录拦截器。
 * 使用 excludePathPatterns 方法排除不需要拦截的路径（如注册和登录页面）。
 * 使用 addPathPatterns 方法指定需要拦截的路径（如登出、发布帖子、编辑帖子等操作）。
 * <p>
 * addResourceHandlers(ResourceHandlerRegistry registry)：
 * 作用：配置静态资源处理。
 * 逻辑：
 * 使用 registry.addResourceHandler("/upload/**") 映射 /upload/** 路径。
 * 使用 addResourceLocations("file:" + Constants.FILE_UPLOAD_DIC) 指定文件上传目录。
 * 这个配置类主要用于配置拦截器和静态资源处理，确保只有已登录的用户才能访问某些敏感操作，并且能够正确处理上传的文件资源。
 */